//
//  Student.swift
//  Swift_base_grammar
//
//  Created by lantaiyuan on 2017/9/14.
//  Copyright © 2017年 lantaiyuan. All rights reserved.
//

import UIKit

class Student: NSObject {
    // -- getter & setter 方法在 Swift 中极少用，仅供参考
    // OC 中利用 getter 方法，编写懒加载，而 Swift 中提供了 lazy
    
     // 如果不希望暴露的方法或者属性，都需要用 private 保护起来！
    private var _name:String?
    var name: String {
        get {
            //返回成员变量的值
            return _name!
        }
        set {
            //使用成员变量 记录新值
            _name = newValue
        }
    }
    var _name2 : String?
    //只读属性readonly
    var name2: String {
        return _name2!
    }
    
    // 懒加载 － 第一次调用的时候，执行闭包，并且在 title3 中保存闭包执行结果
    // 再次调用，不再执行闭包，而是直接返回之前计算的结果！
    // * 只需要计算一次
    // * 需要开辟单独的空间保存计算结果
    // * 闭包的代码，再也不会被调用！
    // * 如果计算量很大，需要提前准备
    
    lazy var name3: String = {
        // 闭包：是一个提前准备好的代码，在需要的时候执行
        // 使用 self. 用于闭包在执行时，准确的绑定对象
        // 闭包中的 self. 是不能省略的！
        return "Mr Sir" + (self._name ?? "")
    }()
}

//class Student1: Person {
//    //学号
//    var no : String
//    override init() {
//        
//        //super.init()
//        no = "001"
//    }
//    
//}
